package org.association.util;

import lombok.Data;
import org.association.enums.ResultCodeEnum;

import java.util.HashMap;
import java.util.Map;


@Data
public class R {
	private static final long serialVersionUID = 1L;

	/**
	 * 是否成功
	 */
	private Boolean success;

	/**
	 * 状态码
	 */
	private Integer code;

	/**
	 * 返回的消息
	 */
	private String message;

	/**
	 * 放置响应的数据
	 */
	private Map<String, Object> data = new HashMap<>();

	public R() {}

	/** 以下是定义一些常用到的格式，可以看到调用了我们创建的枚举类 */

	public static R ok() {
		R r = new R();
		r.setSuccess(ResultCodeEnum.SUCCESS.getSuccess());
		r.setCode(ResultCodeEnum.SUCCESS.getCode());
		r.setMessage(ResultCodeEnum.SUCCESS.getMessage());
		return r;
	}

	public static R error() {
		R r = new R();
		r.setSuccess(ResultCodeEnum.UNKNOWN_REASON.getSuccess());
		r.setCode(ResultCodeEnum.UNKNOWN_REASON.getCode());
		r.setMessage(ResultCodeEnum.UNKNOWN_REASON.getMessage());
		return r;
	}

	public static R setResult(ResultCodeEnum resultCodeEnum) {
		R r = new R();
		r.setSuccess(resultCodeEnum.getSuccess());
		r.setCode(resultCodeEnum.getCode());
		r.setMessage(resultCodeEnum.getMessage());
		return r;
	}

	public R success(Boolean success) {
		this.setSuccess(success);
		return this;
	}

	public R message(String message) {
		this.setMessage(message);
		return this;
	}

	public R code(Integer code) {
		this.setCode(code);
		return this;
	}

	public R put(String key, Object value) {
		this.data.put(key, value);
		return this;
	}

	public R data(Map<String, Object> map) {
		this.setData(map);
		return this;
	}
}
